$(function(){
    //功能一: 全选 
    /* 
        需求:点击全选按钮,让所有的商品进行选中效果
    */

    // 当前为有input标签样式,操作比较麻烦 有BUG

   /*  $('.allSelect').click(function(){
        // alert(1)
        //获取当前span的兄弟input的状态值
        let status=$(this).siblings('input').prop('checked');

        //设置当前状态到其它商品中的input标签上
        $('.singleSelect').prop('checked',!status);

        //把另一个全选也进行选中
        $('.otherSelt').prop('checked',!status);
        console.log(status)
    }) */

    $('.allSelect').click(function(){
        // alert(1)
        //1.获取当前input标签的状态值
        let status=$(this).prop('checked');

        //2.把所有商品进行同步状态(选中)
        $('.singleSelect').prop('checked',status);

        //3.把另一个全选也进行同步状态
        $('.allSelect').prop('checked',status);

         //总价格和总件数
         allCount()
        
    })

    //功能二: 反选
    /* 
        思路:
            1.给singleSelect注册点击事件
            2.定义标杆状态  let flag=false
            3.动态获取到所有单个商品的状态值
                判定:
                    如果其中有一个没有选中,全选就不能选中
                    切换标杆状态  flag=!flag

            4.通过判定flag的状态来设置对应 全选按钮的状态

    
    */
   //批量给单个选项注册事件
/*    $('.singleSelect').click(function(){
    //    alert(1)
        //定义标杆状态 (未选中)
        let flag=false;

        //获取 [所有单个商品] 的状态值()
        //let status=$('.singleSelect').prop('checked');//只能获取到第一个input标签的状态,不能使用
        
        //需要使用遍历 获取所有单个商品状态值
        $('.singleSelect').each(function(index,dom){
            //console.log(dom);//获取到是原生对象
           //console.log($(this));//jq对象

           //获取第一个单个商品input标签的状态值
           let status=$(this).prop('checked');

           //判定:  只要有一个为false 不选中全选 
           //status==false
           if(!status){  //条件语句中 判定条件必需是执行结果为真,才能执行代码 否则不执行代码
            //!status==true
             //切换
             flag=true;
             //一般只要有一个为false,后面的东西就可以不执行了 跳出操作
             return;
           }

           //完整版
        //    if(status){
        //     //切换
        //     flag=false;
        //    }else{
        //     //切换
        //     flag=true;
        //    }
        })

        //判定  当flag 为true时, 表示单个商品至少有一件没有选中  不全选
        if(flag){
            //不全选
            $('.allSelect').prop('checked',false);
        }else{
            //全选
            $('.allSelect').prop('checked',true);
        }

   }) */

   //反选方式二:  
   /* 
    思路:
        主要使用选中前的个数和选中后的个数 来判定是否需要全选


   */

   $('.singleSelect').click(function(){
    //    alert(1)
        //1.获取选中前和选中后的个数
            //未选中时的个数
            let len=$('.singleSelect').length;
            //选中后的个数
            let seLen=$('.singleSelect:checked').length;

        //2.判定
            if(len==seLen){
                //全选
                $('.allSelect').prop('checked',true);
            }else{
                //不进行全选
                $('.allSelect').prop('checked',false);
            }

            //总价格和总件数
            allCount()
   })


   //商品数量加操作:
   $('.addNum').click(function(){
       //改变减操作中的按钮样式
       $('.reduce').css({
                cursor:'pointer',
                color:''
            });

       //    alert(2)
        //1.获取当前行中的数量的值
        let num=$(this).siblings('input').val();

        //数量自增1
        num++;

        //把新数量放入指定位置
        $(this).siblings('input').val(num);

       //调用小计
       sTotal(this,num);
        //总价格和总件数
        allCount()

   })
   
   //商品数量减操作:
   $('.reduce').click(function(){
    //    alert(2)
        //1.获取当前行中的数量的值
        let num=$(this).siblings('input').val();

        //数量自减1
        num--;

        //判定
        if(num<1){
            // num=1; 
            //细节操作
            $(this).css({
                cursor:'not-allowed',
                color:'#ccc'
            });
            return false;
        }

        //把新数量放入指定位置
        $(this).siblings('input').val(num);
        
        //调用小计
        sTotal(this,num);

         //总价格和总件数
         allCount()
   })


   //定义小计函数
    function sTotal(obj,num){
       //计算单个商品的小计功能:
        /* 
            小计= 商品单价*数量 
        */

        //获取单件商品的价格 .sPrice的值  数量本身已经拿到了
        let singlePrice=$(obj).closest('tr').find('.sPrice').text();
        //计算小计
        let singleTotal=singlePrice*num;

        //数据处理
        singleTotal=singleTotal.toFixed(2);

        //把当前的价格添加到小计中
        $(obj).closest('tr').find('.sTotal').text(singleTotal); 
    }


    //定义计算总价和总数量的功能
        /* 
            步骤:
                1.定义变量保存 总价 和总数量
                2.获取已经选中商品 总数量 和总价格
                3.把获取的数据添加到指定位置
        */

        function allCount() {
            //1.定义变量保存 总价 和总数量
                let allNum=0;//总数量
                let allPrice=0;//总价格

            //2.获取已经选中商品 总数量 和总价格
            //由于可能会选中多个商品,需要使用遍历来获取每一件商品中的对应的值 
            //单件商品总数量 和单件商品 总价格 
            $('.singleSelect:checked').each(function(){
                //计算总数量
                    //console.log($(this));//表示当前 $('.singleSelect:checked')
                    //获取当前商品中的总数量
                    let totalN=parseInt($(this).closest('tr').find('.txt').val());
                    //累加
                    allNum+=totalN;  //  allNum= allNum+ totalN

                //计算总价格
                    //获取当前商品的小计
                    let sCount=parseFloat($(this).closest('tr').find('.sTotal').text());
                    //累加
                    allPrice+=sCount;                
            })

            //3.把获取的数据添加到指定位置
            //总数量
            $('.totalNum').text(allNum);

            //总价格
                // 数据处理
                allPrice=allPrice.toFixed(2);

            $('.totalPrice').text(allPrice);

        }

})